#ifndef __SYS_AUDIO_H__
#define __SYS_AUDIO_H__

#include "app_data/DeviceState.h"
#include "audio.h"
#include <bitset>

class SysAudio {
public:
    static SysAudio& getInstance() {
        static SysAudio instance;
        return instance;
    }
    // 删除拷贝构造函数和赋值运算符
    SysAudio(const SysAudio&) = delete;
    SysAudio& operator=(const SysAudio&) = delete;

    void SetSysAudioPath(const std::string& path);
    void SetConfig(int remindType, std::bitset<32> speechEnable, bool isChinese);

    void Index0_InvalidCardInfo(void);                    // 无效手牌，请检查
    void Index1_OperationSuccess(void);                   // 操作成功
    void Index2_StartClockSuccess(char* id, int time);    // ${工号}号，很高兴为您服务${分钟}分钟
    void
    Index3_StartClockWithBadge(char* id, char* badge, int time);    // ${工号}号，很高兴为${手牌}号贵宾服务${分钟}分钟
    void Index4_ServiceEnd(void);                                   // 服务结束，您辛苦了
    void Index5_RoomLineCall(char* room);                           // 请您到${房间}房间排钟
    void Index6_RoomHourCall(char* room);                           // 请您到${房间}房间点钟
    void Index7_RoomCleanStart(void);                               // 房间开始清扫
    void Index8_RoomCleanEnd(void);                                 // 房间清扫结束，您辛苦了
    void Index9_CallingService(void);                               // 正在呼叫服务，请稍等
    void Index10_ServiceCancelled(void);                            // 服务已取消
    void Index11_TechnicianClockOff(void);    // 尊敬的贵宾，本房所有技师已下钟，离开时，请您带好随身物品及电子结算牌
    void Index12_AddClockSuccess(char* id, int time);    // ${工号}号，加钟成功继续为您服务${分钟}分钟
    void Index13_RemindClock(char* id, int time);        // ${工号}号，还有${分钟}分钟到钟
    void Index14_TimeUp(char* id);                       // ${工号}号，已经到钟
    void Index15_Timeout(char* id, int time);            // ${工号}号，已超时${分钟}分钟
    void Index16_MsgArrived(char* id);                   // ${工号}号，来信息了，请刷卡查看
    void Index17_ReservationAvailable(char* id, int hour, int minute);    // ${工号}号，${时}点${分钟}分有预约
    void Index18_ReservationCancelled(char* id, int hour, int minute);    // ${工号}号，${时}点${分钟}预约已取消
    void Index19_RoomHasHour(char* id, char* room);                       // ${工号}号，在${房间}房间有点钟
    void Index20_ComeToFrontDesk(char* id);                               // ${工号}号，请来一下前台
    void Index21_VipWithCarPlate(char* car_plate);             // 请车牌尾号为${车牌尾号}的贵宾来下前台
    void Index22_ProhibitIllegalActivities(void);              // 本场所禁止黄赌毒等非法活动
    void Index23_GuestArrivalNotice(void);                     // 前台呼叫：催房语音
    void Index24_ConsumptionNumber(int consumption_number);    // 消费号${消费号}

private:
    SysAudio();
    ~SysAudio();

    std::string sys_audio_path_;
    Audio* audio_;
    DeviceState* dev_state_;

    int remind_type_;
    std::bitset<32> speech_enable_;
    bool is_chinese_;
};

#endif